package com.plant.order.service.impl;


import com.plant.order.domain.GoodsOrder;
import com.plant.order.domain.Order;
import com.plant.order.mapper.OrderMapper;
import com.plant.order.service.OrderService;
import com.plant.order.vo.GoodsVo;
import com.plant.order.vo.OrderEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.stream.Collectors;


@Service
@Slf4j
public class OrderServiceImpl implements OrderService {

    @Autowired
    private OrderMapper ordersMapper;

    @Override
    public List<Order> findOrder(String orderId) {
        return ordersMapper.findOrder(orderId);
    }

    @Override
    public List<GoodsVo> findAllOrder(Integer userId) {
        // 通过Mapper查询指定用户的全部订单信息
        List<GoodsVo> allOrder = ordersMapper.findAllOrder(userId);

        // 使用Stream API处理每个GoodsVo对象，并收集结果
        return allOrder.stream()
                .map(this::processGoodsVo) // 处理每个GoodsVo对象
                .collect(Collectors.toList()); // 收集处理后的结果
    }

    /**
     * 处理GoodsVo对象，过滤无效的商品ID和名称
     * @param originalGoodsVo 原始的GoodsVo对象
     * @return 处理后的GoodsVo对象
     */
    private GoodsVo processGoodsVo(GoodsVo originalGoodsVo) {
        // 分割商品ID字符串
        String[] pidSplit = originalGoodsVo.getPid().split(",");
        // 分割商品名称字符串
        String[] goodsNameSplit = originalGoodsVo.getGoods_name().split(",");

        // 过滤有效的商品ID
        List<String> validPids = Arrays.stream(pidSplit)
                .filter(this::isValidString) // 过滤长度大于0的字符串
                .collect(Collectors.toList());

        // 过滤有效的商品名称
        List<String> validGoodsNames = Arrays.stream(goodsNameSplit)
                .filter(this::isValidString) // 过滤长度大于0的字符串
                .collect(Collectors.toList());

        // 创建新的GoodsVo对象
        GoodsVo processedGoodsVo = new GoodsVo();

        // 复制原始对象的属性到新对象
        BeanUtils.copyProperties(originalGoodsVo, processedGoodsVo);

        // 设置处理后的商品ID列表
        processedGoodsVo.setPidList(validPids);

        // 设置处理后的商品名称列表
        processedGoodsVo.setGoodsNameList(validGoodsNames);

        return processedGoodsVo;
    }

    /**
     * 检查字符串是否有效
     * @param s 待检查的字符串
     * @return 如果字符串长度大于0，则返回true；否则返回false
     */
    private boolean isValidString(String s) {
        return s.length() > 0;
    }

    @Override
    public GoodsVo findById(Integer id) {
        return ordersMapper.findById(id);
    }

    @Override
    public List<GoodsVo> findByOrderStatus(Integer orderStatus,Integer userId) {
        return ordersMapper.findByOrderStatus(orderStatus,userId);
    }

    @Override
    public List<OrderEntity> findAllOrderTime(Integer userId) {
        //查数据库用实体类
        List<OrderEntity> allOrder = ordersMapper.findAllOrderTime(userId);
        System.out.println(allOrder);
        //这个就是返回前端的vo集合
        ArrayList<OrderEntity> orderVos = new ArrayList<>();
        for (OrderEntity order : allOrder) {
            //遍历获取每条数据
            //创建个vo对象
            OrderEntity orderVo = new OrderEntity();
            //使用java工具类(自带的)    里面的第一个对象放查出来的，第二个放你创建的对象  就复制过来了，但是一定要字段一样
            BeanUtils.copyProperties(order, orderVo);
            //获取当前时间
            Date date = new Date();
            //订单结束时间
            Date endTime = order.getEndTime();
            //判断是否过期
            if (date.getTime() > endTime.getTime()) {
                orderVo.setIsOverdue(1);
            } else {
                orderVo.setIsOverdue(0);
            }
            //将有数据的vo对象添加到vo的集合中
            orderVos.add(orderVo);
        }
        //返回集合
        return orderVos;
    }

    @Override
    public List<GoodsVo> findAll() {
        return ordersMapper.findAll();
    }


    @Override
    public int updateOrder(GoodsOrder goodsOrder) {
        return ordersMapper.updateOrder(goodsOrder);
    }

    @Override
    public List<GoodsVo> findAllStatus() {
        return ordersMapper.findAllStatus();
    }




}
